/************************************************************************/
/* UDimCalc (Ultimate Dimension Calculator)                             */
/* Erstellt: 26.05.2010                                                 */
/* Verantwortlicher Programmierer: Yannik Veeser, Heiko Metzger         */
/* Version 2.0                                                          */
/************************************************************************/

void sphere() {
  // Variablen:
  char exe;

  cout<<"Geben sie bitte an welche Groesse gegeben ist."<<endl;
  cin >> cmd;

  while ( cmd != "Beenden" )
  {
    // Ersten Buchstaben aus cmd lesen
    char* s = const_cast<char*>(cmd.c_str());
    exe=(char)s[0];
    switch ( exe )
    {
      case 'r':
      case 'R':
        // Mit gegebenem Radius Rechnen
        sphere_calc_from_r();
        get_cmd();
        break;

      case 'd':
      case 'D': 
        // Mit gegebenem Durchmesser berechnen 
        sphere_calc_from_d();
        get_cmd();
        break;

      case 'u':
      case 'U': 
        // Mit gegebenem Durchmesser berechnen 
        sphere_calc_from_u();
        get_cmd();
        break;

      case 'o':
      case 'O':
        // Mit gegebener Oberflaeche berechnen
        sphere_calc_from_O();
        get_cmd();
        break;

      case 'v':
      case 'V':
        // Mit gegebenem Umfang berechnen
        sphere_calc_from_V();
        get_cmd();
        break;

      default:
        // Im Falle eines ungueltigen Befehls
        cout<<"Bitte geben sie nur Flaeche, Radius, Umfangoder Durchmesser ein."<<endl;
        cin>>cmd;
        break;
    }
  }
}

void sphere_calc_from_r() {
  double r, d, u, O, V, Pi=3.1415926536;
  cout << "Geben sie nun den Radius der Kugel an." << endl;
  cin  >> r;
  cout << "Die verbleibenden Groessen werden berechnet." << endl;
  d =  r * 2;
  u =  2 * Pi * r;
  O =  4 * Pi * (r*r);
  V =  (4/3) * Pi * (r*r*r);

  cout << "Durchmesser: " << d << endl;
  cout << "Umfang: "      << u << endl;
  cout << "Oberflaeche: " << O << endl;
  cout << "Volumen: "     << V << endl;
}

void sphere_calc_from_d() {
  double r, d, u, O, V, Pi=3.1415926536;
  cout << "Geben sie nun den Durchmesser der Kugel an." << endl;
  cin  >> d;
  cout << "Die verbleibenden Groessen werden berechnet." << endl;
  r =  d / 2;
  u =  2 * Pi * r;
  O =  4 * Pi * (r*r);
  V =  (4/3) * Pi * (r*r*r);

  cout << "Radius: "      << r << endl;
  cout << "Umfang: "      << u << endl;
  cout << "Oberflaeche: " << O << endl;
  cout << "Volumen: "     << V << endl;
}

void sphere_calc_from_u() {
  double r, d, u, O, V, Pi=3.1415926536;
  cout << "Geben sie nun den Umfang der Kugel an." << endl;
  cin  >> u;
  cout << "Die verbleibenden Groessen werden berechnet." << endl;
  r =  u / (2*Pi);
  d =  2 * r;
  O =  4 * Pi * (r*r);
  V =  (4/3) * Pi * (r*r*r);

  cout << "Radius: "      << r << endl;
  cout << "Durchmesser: " << d << endl;
  cout << "Oberflaeche: " << O << endl;
  cout << "Volumen: "     << V << endl;
}

void sphere_calc_from_O() {
  double r, d, u, O, V, Pi=3.1415926536;
  cout << "Geben sie nun die Oberflaeche der Kugel an." << endl;
  cin  >> O;
  cout << "Die verbleibenden Groessen werden berechnet." << endl;
  r =  sqrt(O / (4*Pi));
  d =  2 * r;
  u =  2 * Pi * r;
  V =  (4/3) * Pi * (r*r*r);

  cout << "Radius: "      << r << endl;
  cout << "Durchmesser: " << d << endl;
  cout << "Umfang: "      << u << endl;
  cout << "Volumen: "     << V << endl;
}

void sphere_calc_from_V() {
  double r, d, u, O, V, Pi=3.1415926536;
  cout << "Geben sie nun das Volumen der Kugel an." << endl;
  cin  >> V;
  cout << "Die verbleibenden Groessen werden berechnet." << endl;
  r =  pow(V / ((4/3)*Pi), 1/3);
  d =  2 * r;
  u =  2 * Pi * r;
  O =  4 * Pi * (r*r);

  cout << "Radius: "      << r << endl;
  cout << "Durchmesser: " << d << endl;
  cout << "Umfang: "      << u << endl;
  cout << "Volumen: "     << V << endl;
}

